Memories have been widely used in electronic systems for data storage. They can be divided into two categories: volatile memory and non-volatile memory. A volatile memory requires power to maintain the stored information. In contrast, a non-volatile memory retains its information even when power is turned off. The most widely used type of non-volatile memory today is flash memory. However, as the shrinkage of memory sizes, the development of flash memories is blocked due to their physical limit. Therefore, other types of non-volatile memory, such as resistive random access memory (RRAM), phase change random access memory (PCRAM), magnetoresistive random access memory (MRAM), and the like, have been proposed.